package cn.exrick.xboot.base.service

import cn.exrick.xboot.base.dto.*
import cn.exrick.xboot.base.entity.EnterpriseEmployee
import cn.exrick.xboot.base.entity.Job
import cn.exrick.xboot.base.vo.*
import cn.exrick.xboot.core.common.vo.PageVo
import cn.exrick.xboot.core.common.vo.Result
import cn.exrick.xboot.core.entity.User
import com.baomidou.mybatisplus.extension.service.IService

/**
 * 企业员工接口
 * @author Fei
 */
interface IEnterpriseEmployeeService : IService<EnterpriseEmployee?> {


    /*------------------------企业后台管理操作维护---------------------*/


    /**
     * 获取员工信息
     */
    fun getEmployeeInfo(employeeUserId: String?): Result<EmployeeInfoVo?>?

    /**
     * 更新员工信息
     */
    fun updateEmployeeInfo(employeeInfoDto: EmployeeInfoDto): Result<Any?>?

    /**
     * 企业添加用户(管理系统)
     */
    fun createEnterpriseEmployee(enterpriseEmployeeDto: EnterpriseEmployeeDto?): Result<Any?>?

    /**
     * 企业编辑用户(管理系统)
     */
    fun updateEnterpriseEmployee(enterpriseEmployeeDto: EnterpriseEmployeeDto?): Result<Any?>?

    /**
     * 移除企业用户
     */
    fun removeEnterpriseEmployee(ids:Array<out String>?): Result<Any?>?

    /**
     * 禁用用户
     */
    fun forbiddenEnterpriseEmployee(ids: Array<out String>?): Result<Any?>?

    /**
     * 企业给员工设置安全影响人(管理系统)
     */
    fun settingAffectedPerson(enterpriseSafePersonDto: EnterpriseSafePersonDto?): Result<Any?>?

    /**
     * 获取我的安全影响人列表(管理系统)
     */
    fun getAffectedPersonList(id: String?): Result<MutableList<EnterpriseEmployeeVo>>?


    /**
     * 获取我影响其安全的人的列表
     */
    fun getMeAffectedPersonList(id: String?): Result<MutableList<EnterpriseEmployeeVo>>?


    /**
     * 移除我的安全影响人列表(管理系统)
     */
    fun removeAffectedPersonList(ids: Array<out String>, id: String?): Result<Any?>?

    /**
     * 企业给员工设置安全师傅(管理系统)
     */
    fun settingSafeMasterPerson(enterpriseSafePersonDto: EnterpriseSafePersonDto?): Result<Any?>?

    /**
     * 获取我的安全师傅列表(管理系统)
     */
    fun getSafeMasterPerson(id: String?): Result<MutableList<EnterpriseEmployeeVo>>?

    /**
     * 移除安全师傅列表(管理系统)
     */
    fun removeSafeMasterPerson(ids: Array<out String>, id: String?): Result<Any?>?

    /**
     * 企业获取员工列表(管理系统)
     */
    fun getEnterpriseEmployeeList(enterpriseEmployeeSearchDto: EnterpriseEmployeeSearchDto?, pageVo: PageVo): Result<MutableMap<String, Any?>?>?

    /**
     * 设置员工是否可以离岗(管理系统)
     */
    fun settingEmployeeDimission(ids: Array<out String>?): Result<Any?>?

    /**
     * 企业发布需求(管理系统)
     */
    fun publishOrUpdateEnterpriseTrainingNeed(enterpriseTrainingNeedDto: EnterpriseTrainingNeedDto): Result<Any?>?

    /**
     * 获取该企业发布的需求信息(管理系统)
     */
    fun getMyPublishEnterpriseTrainingNeedList(pageVo: PageVo): Result<MutableMap<String, Any?>?>


    /**
     *移除企业发布的需求信息(管理系统)
     */
    fun removePublishEnterpriseTrainingNeed(ids: Array<out String>): Result<Any?>?


    /**
     * 创建或者更新岗位
     */
    fun createOrUpdateJob(job: Job?): Result<Any?>?


    /**
     * 移除岗位
     */
    fun removeJob(ids:Array<out String>): Result<Any?>?


    /**
     * 获取岗位列表
     */
    fun getJobList(pageVo: PageVo): Result<MutableMap<String, Any?>>?


    /**
     * 获取企业员工的详情信息
     */
    fun getEmployeeTrainingInfo(employeeId: String): EnterpriseEmployeeTrainingVo?


    /**
     * 根据企业id获取用户id
     */
    fun getUserIdByEmployeeId(employeeId: String): String?


    /*------------------获取本企业的所有员工---------------------*/
    /**
     * 获取部门树
     */
    fun getDepartmentTree(parentId: String?, enterpriseId: String): Result<MutableList<DepartmentVo>>?

    /**
     * 根据部门树获取员工列表
     */
    fun getEmployeeListByDepartment(departmentId: String?): Result<MutableList<UserCommonVo>>?

    /**
     * 根据类型获取不同用户
     */
    fun getUserByType(type: Int) : Result<List<UserCommonVo>>?



    /*----------------------影响我安全的人------------------------*/

    /**
     * 影响我安全的人
     */
    fun getAffectedPersonList(): Result<MutableList<UserCommonVo>>


    /*--------------------------辅助方法----------------------*/

    /**
     * 获取员工的岗位id
     */
    fun getJobIdByEmployeeId(employeeId: String): String?

    /**
     * 获取企业的总人数
     */
    fun getEnterpriseEmployeeTotalCount(enterpriseId: String): Int


    /**
     * 获取企业员工列表
     */
    fun getEnterpriseEmployeeList(enterpriseId: String): Result<MutableList<UserCommonVo>>


    /**
     * 通过用户id获取员工id
     */
    fun getEmployeeIdByUserId(userId: String?) : String?


}
